package com.gable.report.service.impl;

import com.gable.report.common.util.UUIDGenerator;
import com.gable.report.dao.IUserDao;
import com.gable.report.model.User;
import com.gable.report.service.UserService;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;

import java.util.HashMap;
import java.util.Map;

/**
 * 类说明：用户模块service层接口实现类
 * 创建时间：2016-08-16
 * @author 乔春峰
 *
 */
@Service("userService")
public class UserServiceImpl implements UserService {
	
	// 日志记录
	private final Log logger = LogFactory.getLog(this.getClass());
	
	// 创建Dao层接口对象(用户)
	@Autowired
	IUserDao iUserDao;

	/**
	 * 查询用户详情（用户名/角色）
	 * @param userId
	 * @return
	 */
	@Override
	public User queryUserById(Long userId) {
		return iUserDao.queryUserById(userId);
	}

	/**
	 * 功能说明：根据用户输的的账户名和密码实现登陆功能
	 * 创建人：乔春峰
	 * 创建时间：2016-08-16
	 * @param username
	 * @param password
	 * @return
	 */
	@Transactional(rollbackFor=RuntimeException.class)
	@Override
	public Map<String, Object> login(String username, String password, String token) {
		Map<String,Object> parameterMap = new HashMap<String, Object>();	// 传参Map
		parameterMap.put("username", username);		// 账户名
		parameterMap.put("password", password);		// 账户密码

		Map<String,Object> resultMap = new HashMap<String, Object>();	// 结果Map
		try {
			int count = iUserDao.queryLoginUserCount(parameterMap);		// 查询用户名手机号码是否存在
			if(count == 0){
				resultMap.put("result", 0);		// 0表示没有该用户或者手机号码
			}else{
				User user = iUserDao.queryUsernamePassword(parameterMap);	// 查询用户名密码输入是否正确
				if(user != null){
					if(token != null){
						if("".equals(token)){
							token = null;
						}
						user.setToken(token);
						// 先清空token(防止token重复)
						iUserDao.emptyTokenByUser(user);
						// 在修改taken
						iUserDao.updateTokenByUser(user);
					}
					user.setSecretKey(UUIDGenerator.generate(user.getId()));
					iUserDao.updateSecretkeyByUserId(user);
					resultMap.put("result", 1);								// 1表示登陆成功
					resultMap.put("loginUser", user);
				}else{
					resultMap.put("result", 2);		// 2表示登陆密码输入错误
				}
			}
		} catch (Exception e) {
			e.printStackTrace();
			logger.error("登陆时出现异常，service层方法名：login");
			resultMap.put("result", 3);		// 3表示登陆时出现异常
		}
		return resultMap;
	}
}
